package com.itheima.d6_lambda;

import com.itheima.d4_arrays.Student;

import java.util.Arrays;

//目标：掌握如何Lambda表达式简化函数式接口的匿名内部类
public class Demo01 {
    public static void main(String[] args) {
        /**
         * Lambda格式：
         *     (重写方法的形参) -> {
         *          重写方法的代码
         *     }
         *
         * 使用条件：只针对函数式接口（只有一个抽象方法的接口，一般会被@FuncationalInterface注解标记）
         */
        Student[] stus = new Student[4];
        stus[0] = new Student("蜘蛛精", 169.5, 23);
        stus[1] = new Student("紫霞", 163.2, 26);
        stus[2] = new Student("青霞", 163.8, 26);
        stus[3] = new Student("至尊宝", 167.5, 24);


        for (int i = 0; i < stus.length; i++) {
            System.out.println(stus[i]);
        }

        //按年龄降序排序
        /*
        Arrays.sort(stus, new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                return o2.getAge() - o1.getAge();
            }
        });
        System.out.println(Arrays.toString(stus));
        */

        //需求：利用Lambda表达式，简化上面代码中的Comparator的匿名内部类写法
        //1.抓住Lambda的使用条件：检查Comparator是否是函数式接口

        //2.知道Lambda的格式，将匿名内部类改成lambda
        Arrays.sort(stus, (Student o1, Student o2) -> {
            return o2.getAge() - o1.getAge();
        });
        System.out.println(Arrays.toString(stus));

        //注意：工作中使用流程：1.先new，完成代码逻辑。2.光标放到接口名，alt+回车
    }
}
